﻿using System;
using System.Collections.Generic;
using System.Runtime.Serialization;

namespace LASLogic.BusinessLayer.DataModel
{
    /// <summary>
    /// Clase que se encarga de manejar el equivalente a un asiento
    /// </summary>
    [DataContract]
    public class Entry
    {
        #region Properties
        /// <summary>
        /// Id único del Asiento
        /// </summary>
        [DataMember]
        public int EntryId { get; set; }
        /// <summary>
        /// Identificador Unico del Asiento
        /// </summary>
        [DataMember]
        public int UniqueEntryId { get; set; }
        /// <summary>
        /// Id del Periodo Contable
        /// </summary>
        [DataMember]
        public int AccountingPeriodId { get; set; }
        /// <summary>
        /// Id del Mes Contable
        /// </summary>
        [DataMember]
        public int AccountingMonthId { get; set; }
        /// <summary>
        /// Estado del mes contable
        /// </summary>
        [DataMember]
        public string MonthStatus { get; set; }
        /// <summary>
        /// Id único de la compañia
        /// </summary>
        [DataMember]
        public int CompanyId { get; set; }
        /// <summary>
        /// Id del tipo de asiento
        /// </summary>
        [DataMember]
        public string EntryType { get; set; }
        /// <summary>
        /// Id del Usuario que creo el Asiento
        /// </summary>
        [DataMember]
        public int UserId { get; set; }
        /// <summary>
        /// Nombre del usuario que realizó el asiento
        /// </summary>
        [DataMember]
        public string UserName { get; set; } 
        /// <summary>
        /// Fecha del dia del asiento
        /// </summary>
        [DataMember]
        public DateTime DocumentDate { get; set; }
        /// <summary>
        /// Fecha del dia en que se contabiliza
        /// </summary>
        [DataMember]
        public DateTime AccountedDate { get; set; }
        /// <summary>
        /// Lista de cuentas de creditos del asiento
        /// </summary>
        [DataMember]
        public List<EntryHasAccount> CreditAccounts { get; set; }
        /// <summary>
        /// Lista de cuentas de debidos del asiento
        /// </summary>
        [DataMember]
        public List<EntryHasAccount> DebitAccounts { get; set; }
        /// <summary>
        /// Comentario asociado con el asiento
        /// </summary>
        [DataMember]
        public string Comentario { get; set; }
        /// <summary>
        /// Referencias del asiento
        /// </summary>
        [DataMember]
        public string Reference1 { get; set; }
        /// <summary>
        /// Referencias del asiento
        /// </summary>
        [DataMember]
        public string Reference2 { get; set; }
        /// <summary>
        /// Referencias del asiento
        /// </summary>
        [DataMember]
        public string Reference3 { get; set; } 
        #endregion


        #region Constructor

        /// <summary>
        /// Constructor de un Asiento
        /// </summary>
        public Entry()
        {
        }

        /// <summary>
        /// Constructor que permite crear un Entry
        /// </summary>
        /// <param name="entryId">Identificador único del Asiento</param>
        /// <param name="uniqueEntryId">Identificador único del Asiento en la empresa</param>
        /// <param name="accountingPeriodId">Identificador del periodo contable</param>
        /// <param name="accountingMonthId">Idenficador del mes contable</param>
        /// <param name="monthStatus">Estado del Mes Contable</param>
        /// <param name="companyId">Identificador de la compañía</param>
        /// <param name="entryType">Tipo de asiento</param>
        /// <param name="userId">Identificador del usuario</param>
        /// <param name="userName">Nombre del usuario que realizo el asiento</param>
        /// <param name="documentDate">Fecha del asiento</param>
        /// <param name="accountedDate">Fecha del dia en que se contabilizó</param>
        /// <param name="creditAccounts">Lista de Cuentas al credito</param>
        /// <param name="debitAccounts">Lista de cuentas al haber</param>
        /// <param name="comentario">Comentarios del asiento</param>
        /// <param name="reference1">Referencia 1</param>
        /// <param name="reference2">Referencia 2</param>
        /// <param name="reference3">Referencia 3</param>
        public Entry(int entryId, int uniqueEntryId, int accountingPeriodId, int accountingMonthId, string monthStatus, int companyId, string entryType, int userId, string userName, DateTime documentDate, DateTime accountedDate, List<EntryHasAccount> creditAccounts, List<EntryHasAccount> debitAccounts, string comentario, string reference1, string reference2, string reference3)
        {
            EntryId = entryId;
            UniqueEntryId = uniqueEntryId;
            AccountingPeriodId = accountingPeriodId;
            AccountingMonthId = accountingMonthId;
            MonthStatus = monthStatus;
            CompanyId = companyId;
            EntryType = entryType;
            UserId = userId;
            UserName = userName;
            DocumentDate = documentDate;
            AccountedDate = accountedDate;
            CreditAccounts = creditAccounts;
            DebitAccounts = debitAccounts;
            Comentario = comentario;
            Reference1 = reference1;
            Reference2 = reference2;
            Reference3 = reference3;
        }

        #endregion
    }
}
